package com.zhanghp.class031;

/**
 * 逆序二进制的状态
 * 测试链接 : https://leetcode.cn/problems/reverse-bits/
 *
 * @author zhanghp
 * @since 2024/4/8 15:25
 */
public class Code05_ReverseBits {

    static public class Solution {
        /**
         * <p>举例</p>
         * abcd_efgh
         * <p>
         * ba dc fe hg
         * <p>
         * dcba hgfe
         * <p>
         * hgfedcba
         * <hr/>
         * <p>
         * 运用与运算先获得a，c，e，g的数字，然后右移动
         * <p>
         * 然后获取b，d，f，h左移动
         * <p>
         * 然后将上面两个步骤 或运算处理
         * <p>
         * 然后处理，ba，dc，fe，hg
         * <p>
         * 获取ba，fe，然后右移动2位
         * <p>
         * 获取dc，hg左移动2位
         * <p>
         * 处理cdba，hgfe,和上述步骤一样
         *
         * @param n
         * @return
         */
        public int reverseBits(int n) {
            n = (n & 0xaaaa_aaaa) >>> 1 | (n & 0x5555_5555) << 1;
            n = (n & 0xcccc_cccc) >>> 2 | (n & 0x3333_3333) << 2;
            n = (n & 0xf0f0_f0f0) >>> 4 | (n & 0x0f0f_0f0f) << 4;
            n = (n & 0xff00_ff00) >>> 8 | (n & 0x00ff_00ff) << 8;
            n = (n & 0xffff_0000) >>> 16 | (n & 0x0000_ffff) << 16;
            return n;
        }
    }


}
